/*
 * descriptors.h
 *
 *  Created on: 19.03.2012
 *      Author: g.kruglov
 */

#ifndef DESCRIPTORS_H_
#define DESCRIPTORS_H_

#define WWPASS_DESCRIPTOR

#include <stdint.h>


#ifdef WWPASS_DESCRIPTOR
#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
#define USB_STRING_DESCRIPTOR_TYPE              0x03  //
#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05

#define VIRTUAL_COM_PORT_DATA_SIZE              64
#define VIRTUAL_COM_PORT_INT_SIZE               8

#define VIRTUAL_COM_PORT_SIZ_DEVICE_DESC        18
#define VIRTUAL_COM_PORT_SIZ_CONFIG_DESC        67
#define VIRTUAL_COM_PORT_SIZ_STRING_LANGID      4
#define VIRTUAL_COM_PORT_SIZ_STRING_VENDOR      14      //
#define VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT     32      //
#define VIRTUAL_COM_PORT_SIZ_STRING_SERIAL      22      //
#endif

#ifndef WWPASS_DESCRIPTOR
#define USB_DEVICE_DESCRIPTOR_TYPE              0x01
#define USB_CONFIGURATION_DESCRIPTOR_TYPE       0x02
#define USB_STRING_DESCRIPTOR_TYPE              0x03
#define USB_INTERFACE_DESCRIPTOR_TYPE           0x04
#define USB_ENDPOINT_DESCRIPTOR_TYPE            0x05

#define VIRTUAL_COM_PORT_DATA_SIZE              64
#define VIRTUAL_COM_PORT_INT_SIZE               8

#define VIRTUAL_COM_PORT_SIZ_DEVICE_DESC        18
#define VIRTUAL_COM_PORT_SIZ_CONFIG_DESC        67
#define VIRTUAL_COM_PORT_SIZ_STRING_LANGID      4
#define VIRTUAL_COM_PORT_SIZ_STRING_VENDOR      38
#define VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT     50
#define VIRTUAL_COM_PORT_SIZ_STRING_SERIAL      26
#endif


#define CONFIG_DESCRIPTOR_SIZE  67


/* Exported functions ------------------------------------------------------- */
extern const uint8_t Virtual_Com_Port_DeviceDescriptor[VIRTUAL_COM_PORT_SIZ_DEVICE_DESC];
extern const uint8_t Virtual_Com_Port_ConfigDescriptor[VIRTUAL_COM_PORT_SIZ_CONFIG_DESC];

extern const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID];
extern const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR];
extern const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT];
extern uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL];

/*
extern const uint8_t Virtual_Com_Port_DeviceDescriptor[18];
extern const uint8_t Virtual_Com_Port_ConfigDescriptor[67];

extern const uint8_t Virtual_Com_Port_StringLangID[4];
extern const uint8_t Virtual_Com_Port_StringVendor[14];
extern const uint8_t Virtual_Com_Port_StringProduct[32];
extern uint8_t Virtual_Com_Port_StringSerial[22];

*/
enum ParityConfig_t { pc_None, pc_Odd, pc_Oven, pc_Mark, pc_Space };
enum StopBits_t     { sb_0_5, sb_1, sb_1_5, sb_2 };
enum WordLenght_t   { wl_5, wl_6, wl_7, wl_8, wl_9 };

struct PortConfig_t {
    uint32_t BaudRate;
    WordLenght_t WordLenght;
    ParityConfig_t ParityConfig;
    StopBits_t StopBits;
};
extern PortConfig_t PortConfiguration;

#endif /* DESCRIPTORS_H_ */
